/*
    axios的封装返回一个promise对象
 */

import axios from 'axios'

import router from '@/router'

// 非组件获取 store 一定使用这种方式
import store from '@/store/'

import JSONbig from 'json-bigint'

import { Toast } from 'vant'

const refreshTokenReq = axios.create({
    baseURL: 'http://toutiao.itheima.net/'
})

const request = axios.create({
    baseURL: 'http://toutiao.itheima.net/',
    //js的安全有效范围
    transformResponse:[function (data){
        try {
            // 转换成功直接返回
            return JSONbig.parse(data)
        } catch (error) {
            // 转换失败
            // console.log('转换失败',error)
            return data
        }
    }]
})

// 设置请求拦截器
request.interceptors.request.use(config =>{
    // console.log(config)
    const { user } = store.state
    if(user){
        config.headers.Authorization = `Bearer ${user.token}` 
    }
    return config;
},(error)=>{
    return Promise.reject(error)
})

// 响应拦截
// request.interceptors.response.use((res) => { 
//     // 响应成功
// }, async function(err){ 
//     // 响应失败，状态码大于 200
//     // console.log(err)
//     console.log(err.response)
//     // const { status } = err.response
//     if(status === 400){
//         //客户端请求参数错误
//         Toast.fail("请求参数错误")
//     }else if(status === 401){
//         //token无效
//         // 如果没有user或者user.token,直接去登录
//         const { user } = store.state
//         if(!user || !user.token){
//             // 直接跳转到登录页
//             return redirectLogin()
//         }

//         // 使用refresh_token 请求获取新的token
//         try{
//             const { data } = await refreshTokenReq({
//                 method: 'PUT',
//                 url: '/app/v1_0/authorizations',
//                 headers:{
//                     Authorization: `Bearer ${user.refresh_token}`
//                 }
//             })
            
//             console.log(data)
//             // 拿到新的token 之后把它更新到新的容器中
//             user.token = data.data.token
//             store.commit('setUser',user)

//             // 把失败的从新发出去
//             // error.config是本次请求的配置对象
//             return request(error.config)
//         } catch(err){
//             // 刷新token 都失败，直接跳转到登录页
//             redirectLogin()
//         }
//     } 
//     else if(status === 403){
//         // 没有操作权限
//         Toast.fail("没有权限访问")
//     }
//     else if(status >= 500){
//         //服务端异常
//         Toast.fail("服务端异常，请稍后再试")
//     }
//     return Promise.reject(err.response) 
// });

//封装一个登录函数
// function redirectLogin(){
//     return router.replace('/login')
// }

export default request;


